# -*- coding: utf-8 -*-
"""
生成图 4-8：30 天需求 vs 预计缺货对照图
"""
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'  # 中文
plt.rcParams['axes.unicode_minus'] = False

# 1. 读取 CSV
df = pd.read_csv('replenishment_plan_30days.csv', encoding='utf-8')
df['日期'] = pd.to_datetime(df['日期'])
df = df.head(30)  # 仅画前 30 天

# 2. 画图
fig, ax1 = plt.subplots(figsize=(10, 4.5))
ax2 = ax1.twinx()

# 左轴：需求柱状图
ax1.bar(df['日期'], df['预测需求'], color='steelblue', alpha=0.7, label='预测需求')
ax1.set_ylabel('预测需求（辆）', fontsize=12)
ax1.set_ylim(0, df['预测需求'].max() * 1.1)

# 右轴：缺货折线（全 0）
ax2.bar(df['日期'], df['预计缺货'], width=0.8, color='red', alpha=0.8, label='预计缺货')
ax2.set_ylim(-5, 50)          # 悬空 0 柱
ax2.set_yticks([0, 25, 50])   # 显示 0
ax2.set_ylabel('预计缺货（辆）', fontsize=12)

df['日期_str'] = df['日期'].dt.strftime('%m-%d')   # 月-日
ax1.set_xticks(df['日期'])
ax1.set_xticklabels(df['日期_str'], rotation=45, fontsize=11)


# 标题与图例
plt.title('图 4-8  30 天需求与预计缺货对照', fontsize=14)
fig.legend(loc='upper right', bbox_to_anchor=(0.9, 0.9))

# 网格与格式
ax1.grid(axis='x', linestyle='--', alpha=0.5)
plt.tight_layout()

# 3. 保存高清图
plt.savefig('fig4-8_demand_vs_shortage.png', dpi=300, bbox_inches='tight')
# plt.savefig('fig4-8_demand_vs_shortage.pdf', bbox_inches='tight')
plt.show()